package design_pattern.singleton;

/**
 * @Author pc
 * @Date 2019/8/23 15:50
 * @Description
 */
public class DoubleCheckLockLazySingleton{
    private static volatile DoubleCheckLockLazySingleton instance = null;
    /**
     * 私有构造方法,保证正常情况外部无法实例该对象，无法防止反射
     */
    private DoubleCheckLockLazySingleton() {
        System.out.println("初始化");
    }
    /**
     * 返回一个实例对象
     * @return
     */
    public static DoubleCheckLockLazySingleton getInstance(){
        if(instance == null){//第一次检查
            synchronized (Object.class){
                if(instance == null){//第二次检查
                    instance = new DoubleCheckLockLazySingleton();
                }
            }
        }
        return instance;
    }
}
